package com.zzyl.nursing.util;

import java.text.SimpleDateFormat;
import java.util.Date;

public class CodeGeneratorUtil {
    // 用于记录当前的后缀值，初始为 1
    private static int counter = 1;
    // 定义锁对象，用于保证线程安全
    private static final Object lock = new Object();

    /**
     * 生成 16 位编号的方法
     * @return 生成的 16 位编号
     */
    public static String generateCode() {
        // 获取当前时间
        Date now = new Date();
        // 定义时间格式，精确到年月日时分秒
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        // 格式化当前时间
        String timePart = sdf.format(now);

        // 加锁，保证线程安全
        synchronized (lock) {
            // 将计数器的值格式化为 4 位字符串，不足 4 位前面补 0
            String counterPart = String.format("%04d", counter);
            // 生成完整的 16 位编号
            String code = timePart + counterPart;

            // 计数器加 1
            counter++;
            // 如果计数器超过 9999，重置为 1
            if (counter > 9999) {
                counter = 1;
            }

            return code;
        }
    }
}